package cn.tedu.csmall.product.service;

import cn.tedu.csmall.pojo.dto.CategoryAddNewDTO;
import cn.tedu.csmall.pojo.dto.CategoryBaseInfoDTO;
import cn.tedu.csmall.pojo.dto.CategoryDisPlayDTO;
import cn.tedu.csmall.pojo.dto.CategoryEnableDTO;
import cn.tedu.csmall.pojo.vo.CategoryDetailsVO;
import cn.tedu.csmall.pojo.vo.CategorySimpleListItemVO;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

//业务逻辑层只以成功来设计
//这个模块中只存放接口 实现类依旧在webapi里面实现

public interface ICategoryService {
    /**
     * 添加“类别”
     * @param categoryAddNewDTO
     */
    @Transactional//事务：是一种能够保证同一个业务中多个写（增删改）操作要么全部成功，要么失败的机制！
    void add(CategoryAddNewDTO categoryAddNewDTO);

    /**
     * 根据"id"删除类别
     * @param id
     */
    void delete(Long id);


    /**
     * 根据parentId获取“子集类别”简单信息
     * @param parentId
     * @return
     */
    List<CategorySimpleListItemVO> listByParentId(Long parentId);

    /**
     * 根据id获取“类别”详细信息
     * @param id
     * @return
     */
    CategoryDetailsVO getDetailsById(Long id);

    /**
     * 根据用户传递信息修改是否启用状态
     * @param categoryEnableDTO
     */
    void updateEnable (CategoryEnableDTO categoryEnableDTO);

    /**
     * 根据用户传递信息修改是否显示状态
     * @param categoryDisPlayDTO
     */
    void updateIsDisplay (CategoryDisPlayDTO categoryDisPlayDTO);

    /**
     * 根据用户传递id修改基本信息
     * @param categoryBaseInfoDTO
     */
    void updateBaseInfo (CategoryBaseInfoDTO categoryBaseInfoDTO);

    /**
     * 预热类别数据的缓存
     */
    void preloadCache();
}
